package com.threadlocal;

import java.util.Hashtable;
import java.util.Map;
import java.util.Random;

public class ThreadLocalTest {

    //这是一个线程安全的 map
//    public final static Map<String,Object> data = new Hashtable<>();
    public static ThreadLocal<Object> threadLocal = new ThreadLocal<>();
    private static Random random = new Random();

    public static class Task implements Runnable{

        @Override
        public void run() {
            //在Run方法中，随机生成一个变量（线程要关联的数据）
            //然后以当前线程名为key保存到map当中
            int i = random.nextInt(1000);
            String name = Thread.currentThread().getName();//获取当前线程名
            System.out.println("线程【"+name+"】生成的随机数是："+i);
//            data.put(name,i);//保存到map当中
            threadLocal.set(i);//给当前线程关联一个数据

            try {
                Thread.sleep(5000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            new OrderService().createOrder();
            //在Run方法结束前，以当前线程名获取出数据并打印。查看是否可以取出操作
//            Object o = data.get(name);
            Object o = threadLocal.get();
            System.out.println("线程【"+name+"】快结束时，取出的数据是："+o);
        }
    }

    public static void main(String[] args) {
        for (int i=0;i<3;i++){
            new Thread(new Task()).start();//开启3个线程
        }
    }
}
